#!/bin/bash

# 脚本名称: offline_reset_user_password.sh
# 该脚本用于离线修改用户密码
# 提供多种实现方法:
# 1. 使用chroot环境
# 2. 直接修改/etc/shadow文件

# 检查是否以root用户身份运行
if [[ $EUID -ne 0 ]]; then
    echo "[ERROR] 此脚本需要以root用户身份运行"
    exit 1
fi

# 获取要重置密码的用户名
read -p "请输入要重置密码的用户名: " username

# 检查用户是否存在
if ! id "$username" &>/dev/null; then
    echo "[ERROR] 用户 $username 不存在"
    exit 1
fi

# 方法1: 使用chroot环境修改密码
reset_password_with_chroot() {
    # 假设根文件系统挂载在/mnt/root
    mount_point="/mnt/root"
    
    # 检查挂载点是否存在
    if [[ ! -d "$mount_point" ]]; then
        echo "[ERROR] 挂载点 $mount_point 不存在"
        exit 1
    fi

    # 使用chroot进入挂载的根文件系统
    chroot "$mount_point" /bin/bash -c "passwd $username"
    echo "[INFO] 用户 $username 的密码已重置(使用chroot方法)"
}

# 方法2: 直接修改/etc/shadow文件
reset_password_with_shadow() {
    # 生成新密码的加密哈希
    echo "请输入新密码:"
    read -s new_password
    hashed_password=$(openssl passwd -1 "$new_password")

    # 修改/etc/shadow文件
    sed -i "s/^$username:[^:]*:/$username:$hashed_password:/" /etc/shadow
    echo "[INFO] 用户 $username 的密码已重置(直接修改/etc/shadow文件)"
}

# 主函数: 提供选择重置方法
main() {
    echo "请选择离线修改密码的方法:"
    echo "1) 使用chroot环境"
    echo "2) 直接修改/etc/shadow文件"
    read -p "请输入选择(1-2): " choice

    case $choice in
        1) reset_password_with_chroot ;;
        2) reset_password_with_shadow ;;
        *) echo "[ERROR] 无效的选择" ;;
    esac
}

# 调用主函数
main "$@"